﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Collections;

namespace l1cs.server.utils
{
    class IterableElementList : IEnumerable
    {
        private IterableNodeList _list;

        private class MyIterator : IEnumerator
        {
            private int _index;
            private IEnumerator _links;
            //    private Element _next = null;

            public MyIterator( IEnumerator links )
            {
                _index = -1;
                _links = links;
                //updateNextElement();
            }

            public bool MoveNext()
            {
                if ( _links.MoveNext() )
                {
                    //    _index++;
                    return true;
                }
                return false;
            }

            public object Current
            {
                get
                {
                    //if ( _index == -1 )
                    //{
                    return null;
                    //}
                    //return _links[_index];
                }
            }

            public void Reset()
            {
                _index = -1;
            }

            //    private void updateNextElement() {
            //        while (_itr.hasNext()) {
            //            Node node = _itr.next();
            //            if (node instanceof Element) {
            //                _next = (Element) node;
            //                return;
            //            }
            //        }
            //        _next = null;
            //    }

            //    @Override
            //    public boolean hasNext() {
            //        return _next != null;
            //    }

            //    @Override
            //    public Element next() {
            //        if (!hasNext()) {
            //            throw new NoSuchElementException();
            //        }
            //        Element result = _next;
            //        updateNextElement();
            //        return result;
            //    }

            //    @Override
            //    public void remove() {
            //        throw new UnsupportedOperationException();
            //    }
        }

        public IterableElementList( XmlNodeList list )
        {
            _list = new IterableNodeList( list );
        }

        //@Override
        //public Iterator<Element> iterator() {
        //    return new MyIterator(_list.iterator());
        //}
        public IEnumerator GetEnumerator()
        {
            return new MyIterator( _list.GetEnumerator() );
        }
    }
}
